home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / MyVersionResource.p < prev    next >
Text File  |  1997-04-21  |  2KB  |  80 lines

  1. unit MyVersionResource;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types;
  7.  
  8. {$PUSH}
  9. {$ALIGN MAC68K}
  10.  
  11.     type
  12.         versionRecord = packed record
  13.                 numericVersion: NumVersion;
  14.                 countryCode: integer;
  15.                 shortVersion: Str15;
  16.                 longVersion: Str255;
  17.                 name: Str63;
  18.             end;
  19.  
  20. {$ALIGN RESET}
  21. {$POP}
  22.  
  23.     procedure GetVersion (resfile: integer; var vers: versionRecord);
  24.     procedure SetVersionParamText (resfile: integer; c3: Str255);
  25.  
  26. implementation
  27.  
  28.     uses
  29.         Resources, Memory, Dialogs, MyStrings;
  30.  
  31.     procedure GetVersion (resfile: integer; var vers: versionRecord);
  32.         var
  33.             vh: Handle;
  34.             p: integer;
  35.             saved_resfile: integer;
  36.     begin
  37.         saved_resfile := CurResFile;
  38.         UseResFile( resfile );
  39.  
  40.         vh := Get1Resource('vers', 1);
  41.         if vh = nil then begin
  42.             longint(vers.numericVersion) := $00002000;
  43.             vers.countryCode := 0;
  44.             vers.shortVersion := '0.0.0';
  45.             vers.longVersion := 'Unknown v0.0.0';
  46.             vers.name := 'Unknown';
  47.         end else begin
  48.             BlockMoveData(vh^, @vers, sizeof(vers));
  49.             BlockMoveData(Ptr(longint(vh^) + (longint(@vers.shortVersion) - longint(@vers)) + length(vers.shortVersion) + 1), 
  50.                 @vers.longVersion, sizeof(vers.longVersion));
  51.             if length(vers.shortVersion) >= sizeof(vers.shortVersion) then begin
  52. {$PUSH}
  53. {$R-}
  54.                 vers.shortVersion[0] := chr(sizeof(vers.shortVersion) - 1);
  55. {$POP}
  56.             end;
  57.             ReleaseResource(vh);
  58.         end;
  59.         p := Pos(vers.shortVersion, vers.longVersion);
  60.         while (p > 0) & (vers.longVersion[p] <> ' ') do begin
  61.             p := p - 1;
  62.         end;
  63.         p := p - 1;
  64.         if p < 1 then begin
  65.             p := 255;
  66.         end;
  67.         vers.name := TPcopy(vers.longVersion, 1, p);
  68.  
  69.         UseResFile( saved_resfile );
  70.     end;
  71.  
  72.     procedure SetVersionParamText (resfile: integer; c3: Str255);
  73.         var
  74.             vers: versionRecord;
  75.     begin
  76.         GetVersion(resfile, vers);
  77.         ParamText(vers.shortVersion, vers.longVersion, vers.name, c3);
  78.     end;
  79.  
  80. end.